vim ftp python
2
2013-03-09 22:42:04 1) download fct, check which file to update
1
" upload vimwiki to ftp " if exists("loaded_Vimwiki2Ftp") finish endif let loaded_Vimwiki2Ftp = 1 function VimwikiAll2Ftp() python <<EOF import vim import os from ftplib import FTP import pickle import threading import Queue import time ts = time.time() #vim.command(':w') host = 'portal.sjtu.edu.cn' timeout = 30 port = 21 user = 'username' psw = 'password' wikipath = r'E:\ideas' pipnum = 1 maxpipnum = 9 class Sjftp(threading.Thread): '''''' def __init__(self,queue): self.ftp = FTP(host=host,user=user,passwd=psw,timeout=timeout) self.ftp.getwelcome() threading.Thread.__init__(self) self.ftp.cwd('/') self.__queue = queue self.setDaemon(True) def run(self): while True: try : wiki = self.__queue.get() if wiki.startswith(wikipath): ftppath = wiki[len(wikipath):].replace('\\',r'/') self.ftp.storbinary("STOR "+ftppath,open(wiki,'rb')) self.__queue.task_done() print ftppath except Queue.Empty: break self.ftp.quit() ftp = FTP(host=host,user=user,passwd=psw,timeout=timeout) print ftp.getwelcome() fctpath = os.path.join(wikipath,'vimwiki','fct') if os.path.exists(fctpath) : fct = pickle.load(file(fctpath)) else : fct = dict() #pickle.dump(fct,file(fctpath,'w')) fctlist = dict() for root , dirs , files in os.walk(os.path.join(wikipath,'vimwiki')): rootftp = root[len(wikipath):].replace('\\',r'/') ftp.cwd('/') try : ftp.cwd(rootftp) except: ftp.cwd('/') ftp.mkd(rootftp) for f in files : fp = os.path.join(root,f) fctlist[fp] = os.stat(fp).st_mtime ftp.quit() if fctpath in fctlist : del fctlist[fctpath] filelist = fctlist.copy() fctlist = [ i for i in fctlist if (not i in fct) or fctlist[i]>fct[i] ] if fctlist==dict() : os.exit(0) queue = Queue.Queue(0) pipnum = min( len(fctlist) / 5 + 1 , maxpipnum ) for i in xrange(pipnum): Sjftp(queue).start() for i in fctlist : queue.put(i) queue.join() pickle.dump(filelist,file(fctpath,'w')) te = time.time() print 'total time:' ,te-ts ,'s' EOF endfunction function Vimwiki2Ftp() python <<EOF import vim import os , sys from ftplib import FTP vim.command(':w') host = 'portal.sjtu.edu.cn' timeout = 30 port = 21 user = 'username' psw = 'password' wikipath = r'E:/ideas' wiki= vim.current.buffer.name if not wiki.startswith(wikipath): sys.exit() wikidir = os.path.dirname(wiki[len(wikipath):]) wikiname = os.path.basename(wiki[len(wikipath):]) ftp = FTP(host=host,user=user,passwd=psw,timeout=timeout) print ftp.getwelcome() ftp.cwd(wikidir) #ftp.storbinary("STOR"+wikiname,open(wikipath+os.sep+wiki,'rb')) ftp.storbinary("STOR "+wikiname,open(wiki,'rb')) print wikiname , 'upload to ftp successful' ftp.quit() EOF endfunction " map nmap <silent> <leader>aft :call VimwikiAll2Ftp()<CR> nmap <silent> <leader>ft :call Vimwiki2Ftp()<CR>